package bite;

import java.util.Arrays;
import java.util.Scanner;

/**
 * Creared with IntelliJ IDEA.
 * Description:【洗牌】洗牌在生活中十分常见，现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌，从上到下依次是第1张，第2张，第3张一直到第2n张。首先，我们把
 * 这2n张牌分成两堆，左手拿着第1张到第n张（上半堆），右手拿着第n+1张到第2n张（下半堆）。接着就开始洗牌的过程，先放下右手的最后一张牌，再放下左手
 * 的最后一张牌，接着放下右手的倒数第二张牌，再放下左手的倒数第二张牌，直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌，最开始牌
 * 的序列是1,2,3,4,5,6。首先分成两组，左手拿着1,2,3；右手拿着4,5,6。在洗牌过程中按顺序放下了6,3,5,2,4,1。把这六张牌再次合成一组牌之后，我们按照从上往下
 * 的顺序看这组牌，就变成了序列1,4,2,5,3,6。 现在给出一个原始牌组，请输出这副牌洗牌k次之后从上往下的序列。
 * User:yxd
 * Date:2022-05-18
 * Time:18:34
 */
public class Day21_1 {
    //分牌,如果按照牌的序号来看,i序号的牌洗过之后会变成2 * i - 1(3->5),i + n序号的牌洗过之后会变成2 * i(4(分牌后的第二堆牌的1号)->2)
    //如果按照索引来看的话,前一堆i下标的(0,1,2)洗过之后会变成2 * i(0,2,4) 后一堆i+n下标的(3-n,4-n,5-n)洗过之后会变成2 * i + 1(1,3,5)
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int t = input.nextInt();//组数
        while(t-- != 0) {
            int n = input.nextInt();//后面有2n个牌
            int k = input.nextInt();//洗牌次数
            int[] nums = new int[2 * n];
            for (int i = 0; i < nums.length; i++) {
                nums[i] = input.nextInt();//原始数据
            }
            while(k-- != 0){
                int[] arr = new int[nums.length];
                for(int i = 0;i < n;i ++){
                    arr[2 * i] = nums[i];
                    arr[2 * i + 1] = nums[i + n];
                }
                nums = arr;
            }
            for (int i = 0; i < nums.length - 1; i++) {

                System.out.print(nums[i] + " ");
            }
            System.out.println(nums[nums.length - 1]);
        }

    }
    public static void main1(String[] args) {
        Scanner input = new Scanner(System.in);
        int t = input.nextInt();//组数
        while (t-- != 0) {

            int n = input.nextInt();//后面有2n个牌
            int k = input.nextInt();//洗牌次数
            int[] nums = new int[2 * n];
            for (int i = 0; i < nums.length; i++) {
                nums[i] = input.nextInt();//原始数据
            }

            //先洗一次然后重复这个操作,直至洗完为止,但是是不是要在弄一个数组,把上次洗完的牌保留下来,方便后面的洗牌,
            while (k-- != 0) {
                int[] cN = Arrays.copyOf(nums, 2 * n);
                int l = n - 1;
                int r = 2 * n - 1;
                int x = 2 * n - 1;
                while (l > -1 && r > n - 1) {
                    nums[x--] = cN[r--];
                    nums[x--] = cN[l--];
                }
            }
            for (int i = 0; i < nums.length - 1; i++) {

                System.out.print(nums[i] + " ");
            }
            System.out.println(nums[nums.length - 1]);

        }
    }

}
